package com.lzq.mq.broker.utils;

import com.lzq.mq.broker.cache.CommonCache;
import com.lzq.mq.common.constants.BrokerConstants;

/**
 * 文件名处理工具类
 */
public class FileNameUtil {

    /**
     * 构建第一个commitLog文件名
     * @return commitLog文件名
     */
    public static String buildFirstCommitLogFileName() {
        return "00000000";
    }

    /**
     * 创建第一个消费队列文件
     * @return 消费队列文件名
     */
    public static String buildFirstConsumeQueueName() {
        return "00000000";
    }

    /**
     * 构建下一个文件名(CommitLog, ConsumeQueue)
     * @param oldFileName 旧的文件名
     * @return 新的文件名
     */
    public static String incrFileName(String oldFileName) {
        if (8 != oldFileName.length()) {
            throw new IllegalArgumentException("commitLog文件名长度必须为8");
        }
        long fileIndex = Long.parseLong(oldFileName);
        ++fileIndex;
        return String.format("%08d", fileIndex);
    }

    /**
     * 通过主题名称和最新的commitLog文件名称构建commitLog文件绝对路径
     * @param topicName 主题名称
     * @param fileName 最新的commitLog文件名称
     * @return commitLog文件绝对路径
     */
    public static String buildCommitLogFilePath(String topicName, String fileName) {
        return CommonCache.getGlobalProperties().getBrokerHome()
                + BrokerConstants.BASE_COMMITLOG_PATH
                + "/" + topicName
                + "/" + fileName;
    }

    /**
     * 构建消费队列文件绝对路径
     * @param topicName 主题名称
     * @param queueId 队列ID
     * @param fileName 文件名
     * @return 消费队列文件绝对路径
     */
    public static String buildConsumeQueueFilePath(String topicName, Integer queueId, String fileName) {
        return CommonCache.getGlobalProperties().getBrokerHome()
                + BrokerConstants.BASE_CONSUME_QUEUE_PATH
                + "/" + topicName
                + "/" + queueId
                + "/" + fileName;
    }

    /**
     * 构建commitLog所在目录的基本路径（文件夹）
     */
    public static String buildCommitLogBasePath(String topicName) {
        return CommonCache.getGlobalProperties().getMqHome()
                + BrokerConstants.BASE_COMMITLOG_PATH
                + BrokerConstants.SPLIT
                + topicName;
    }

    /**
     * 构建consumeQueue所在的基本路径
     * @param topic 主题
     * @return 队列基本路径
     */
    public static String buildConsumeQueueBasePath(String topic) {
        return CommonCache.getGlobalProperties().getMqHome()
                + BrokerConstants.BASE_CONSUME_QUEUE_PATH
                + BrokerConstants.SPLIT
                + topic;
    }
}
